// 现在有一个打怪类型的游戏，这个游戏是这样的，你有n个技能
// 每一个技能会有一个伤害，
// 同时若怪物小于等于一定的血量，则该技能可能造成双倍伤害
// 每一个技能最多只能释放一次，已知怪物有m点血量
// 现在想问你最少用几个技能能消灭掉他(血量小于等于0)
// 技能的数量是n，怪物的血量是m
// i号技能的伤害是x[i]，i号技能触发双倍伤害的血量最小值是y[i]
// 1 <= n <= 10
// 1 <= m、x[i]、y[i] <= 10^6
// 测试链接 : https://www.nowcoder.com/practice/d88ef50f8dab4850be8cd4b95514bbbd
// 提交以下的所有代码，可以直接通过

#include <cstdio>
#include <algorithm>

using namespace std;

const int MAXN = 11;
const int INF = 0x3f3f3f3f;
int kill[MAXN];
int blood[MAXN];

void swap(int i, int j)
{
    std::swap(kill[i], kill[j]);
    std::swap(blood[i], blood[j]);
}

int f(int n, int i, int r)
{
    if(r <= 0)
    {
        // 之前的决策已经让怪兽挂了！返回使用了多少个节能
        return i;
    }
    // r > 0
    if(i == n)
    {
        // 无效，之前的决策无效
        return INF;
    }
    // 返回至少需要几个技能可以将怪兽杀死
    int ans = INF;
    for(int j = i; j < n; ++j)
    {
        ::swap(i, j);
        ans = min(ans, f(n, i + 1, r - (r > blood[i] ? kill[i] : kill[i] * 2)));
        ::swap(i, j);
    }
    return ans;
}


int main()
{
    int t;
    scanf("%d", &t);
    for(int i = 0; i < t; ++i)
    {
        int n, m;
        scanf("%d%d", &n, &m);
        for(int i = 0; i < n; ++i)
        {
            scanf("%d%d", &kill[i], &blood[i]);
        }
        int ans = f(n, 0, m);
        if(ans == INF) printf("-1\n");
        else printf("%d\n", ans);
    }

    return 0;
}